package com.hsurosy.hsuchain.nft.web.vo;

import lombok.Data;

import java.util.List;

/**
 * 多结果对象封装类
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 5:15
 * @Description
 * @Version: v1.0.0
 */
@Data
public class MultiResult<T> extends Result<List<T>> {
    /**
     * 总记录数
     */
    private long total;
    /**
     * 当前页码
     */
    private int page;
    /**
     * 每页记录数
     */
    private int size;

    /**
     * 默认构造方法
     */
    public MultiResult() {
        super();
    }

    /**
     * 带参数的构造方法
     *
     * @param success  是否成功
     * @param code     响应码
     * @param message  响应消息
     * @param data     数据列表
     * @param total    总记录数
     * @param page     当前页码
     * @param size     每页记录数
     */
    public MultiResult(Boolean success, String code, String message, List<T> data, long total, int page, int size) {
        super(success, code, message, data);
        this.total = total;
        this.page = page;
        this.size = size;
    }

    /**
     * 构建成功的多结果对象
     *
     * @param data  数据列表
     * @param total 总记录数
     * @param page  当前页码
     * @param size  每页记录数
     * @param <T>   数据类型
     * @return 成功的多结果对象
     */
    public static <T> MultiResult<T> successMulti(List<T> data, long total, int page, int size) {
        return new MultiResult<>(true, SUCCESS.name(), SUCCESS.name(), data, total, page, size);
    }

    /**
     * 构建失败的多结果对象
     *
     * @param errorCode 错误码
     * @param errorMsg  错误消息
     * @param <T>       数据类型
     * @return 失败的多结果对象
     */
    public static <T> MultiResult<T> errorMulti(String errorCode, String errorMsg) {
        return new MultiResult<>(false, errorCode, errorMsg, null, 0, 0, 0);
    }

}
